Estándares a los que se hace referencia en reglas y pautas definidas por la ADA.
Definición de servicios y eventos
Open API
Descripción
Open API es un estándar para la descripción de las API. La especificación OpenAPI permite definir contratos agnósticos a la tecnología e independiente de los fabricantes para los servicios de API. En particular, OpenAPI combinado con Swagger puede utilizarse para describir, desarrollar, probar y documentar las API compatibles con REST.
Ámbito y beneficios
Se recomienda el uso de OpenAPI siempre que haya que se vaya a definir un servicio REST para definir el contrato antes de hacer la implementación.
Los beneficios de usar OpenAPI son:
- Documentación Clara y Concisa: OpenAPI proporciona una documentación automática y detallada la API facilitando su comprensión y uso.
- Interoperabilidad: Al usar un estándar abierto, las APIs creadas con OpenAPI pueden consumirse por cualquier tecnología y lenguaje de programación compatible con REST.
- Validación y Pruebas Automáticas: La especificación OpenAPI no solo describe la API, sino que también puede utilizarse para validar las solicitudes y respuestas, permitiendo una implementación más segura y confiable.
- Generación de Código Cliente y Servidor: Utilizando la especificación OpenAPI, se pueden generar automáticamente bibliotecas cliente y stubs de servidores en varios lenguajes de programación, lo que acelera el desarrollo y reduce errores.
- Mejora de la Colaboración: La documentación generada por OpenAPI facilita la colaboración entre equipos de desarrollo, ya que todos tienen una referencia clara y estandarizada de cómo funciona la API.
Casos de uso
- Publicación de una API pública: Si un proyecto necesita publicar una API y el contrato OpenAPI de este servicio se publica en el API Manager, se garantiza que dicho servicio pueda ser invocado por cualquier entidad o aplicación (por ejemplo, el servicio de datos abiertos).
- Publicación de servicio que será consumido por el FrontEnd: Si el contrato está definido, los equipos de BackEnd y FrontEnd pueden trabajar de forma independiente. Mientras el equipo BackEnd se enfoca en implementar el servicio, el equipo FrontEnd puede enfocarse en implementar la integración con dicho servicio ayudándose de implementaciones Mock o Stub.
Async API
Descripción
AsyncAPI es una iniciativa de código abierto que proporciona una especificación para describir y documentar eventos asíncronas usando un lenguaje fácil de interpretar tanto por máquinas como humanos.
Ámbito y beneficios
Se recomienda el uso de Async API siempre que haya que definirse un evento. Dentro del contexto de JdA este eventos habitualmente será procesado por Kafka.
Los beneficios de usar Async API son:
Estandarización: AsyncAPI proporciona una especificación estandarizada para definir eventos, lo que facilita la interoperabilidad entre diferentes sistemas y tecnologías.
Protocolo Agnóstico: La especificación es independiente del protocolo, lo que permite su uso con una variedad de tecnologías de mensajería como MQTT, Kafka, WebSockets, entre otras.
Mejora del Rendimiento y Escalabilidad: Al permitir operaciones no secuenciales, AsyncAPI ayuda a mejorar el rendimiento y la escalabilidad de las aplicaciones, ya que los componentes de bajo rendimiento no bloquean a sus consumidores.
Generación Automática de Documentación: AsyncAPI ofrece herramientas para generar documentación automáticamente, lo que facilita la comunicación y el mantenimiento de los eventos.
Generación de Código: Proporciona generadores de código para varios lenguajes de programación, simplificando el desarrollo y la integración de servicios.
Facilidad de Uso: AsyncAPI busca hacer que trabajar con arquitecturas orientadas a eventos sea tan sencillo como trabajar con APIs RESTful, permitiendo a los desarrolladores crear APIs rápidamente y sin necesidad de conocimientos previos profundos.
Casos de uso
- Envío de correos electrónicos: El envío de correos electrónicos es un caso de uno habitual en la generación de eventos. Con un contrato definido en Async API se simplifica la integración de las diferentes aplicaciones con el servidor de correos ya que todas las aplicaciones tendrán disponibles el contrato que debe cumplir el evento para recibir y procesar correctamente el correo electrónico.
- Notificaciones de cambios de estado: Otro caso de uso habitual que implica la generación de eventos es el envío de notificaciones. Al igual que el correo electrónico, con un contrato Async API pueden generarse eventos que permitan notificar cambios de estado entre sistemas BackEnd.
WSDL
Descripción
WSDL (Web Services Description Language) es una especificación estándar para describir servicios basados en XML de red. El protocolo más habitual con el que está vinculado es SOAP. Esta especificación proporciona a los proveedores de servicios un modo sencillo de describir el formato básico de las peticiones a sus sistemas independientemente de la implementación del motor de ejecución subyacente.
WSDL define un formato XML para describir servicios de red como un conjunto de puntos finales que operan en mensajes que contienen información orientada a documentos u orientada a procedimientos. Primero se describen las operaciones y mensajes de forma abstracta y luego se enlazan a un protocolo de red y formato de mensaje concreto para definir un punto final. Los puntos finales relacionados se combinan en puntos finales abstractos (servicios). WSDL es independientemente de los formatos de mensaje o los protocolos de red que se utilicen para comunicarse. Esto significa que se definen las interfaces de forma abstracta con el esquema XML y luego se enlazan a representaciones concretas que son adecuadas para el protocolo.
Ámbito y beneficios
La creación de servicios usando la especificación WSDL en nuevos desarrollos no se encuentra recomendado por ser un protocolo obsoleto y de bajo rendimiento si se compara con REST y otros protocolos de comunicación más modernos. Sin embargo, el uso de contratos WSDL ya existentes para crear clientes es un caso de uso habitual cuando es necesario comunicarse con sistemas legacy que aún ofrecen sus servicios bajo uno de los protocolos de comunicación vinculados a esta especificación.
Si es está en ese caso de uso, los beneficios que se obtienen creando los clientes a partir de la especificación del contrato en este protocolo son los siguientes:
Interoperabilidad: Un contrato WSDL permite que el servicio sea consumido por aplicaciones escritas en cualquier lenguaje de programación que soporte SOAP y XML. Esto facilita la integración con sistemas de terceros y mejora la interoperabilidad.
Automatización del desarrollo: Con un WSDL, los desarrolladores pueden generar automáticamente el código necesario para interactuar con el servicio. Esto reduce el tiempo de desarrollo y minimiza los errores humanos al evitar la necesidad de escribir manualmente las llamadas al servicio.
Documentación clara y precisa: El WSDL actúa como una documentación formal del servicio, describiendo las operaciones disponibles, los parámetros requeridos y los tipos de datos utilizados. Esto facilita la comprensión del servicio tanto para los desarrolladores actuales como para los futuros.
Facilita el mantenimiento: Tener un contrato WSDL bien definido ayuda a mantener el servicio a lo largo del tiempo. Cualquier cambio en el servicio puede ser reflejado en el WSDL, asegurando que los clientes siempre tengan una referencia actualizada.
Casos de uso
- Comunicación con servicios legacy: Como ya se ha indicado, el caso de uso más habitual será la creación de clientes interoperables que permitan realizar peticiones a servicios legacy implementados usando el protocolo SOAP.
Avro
Descripción
El estándar de definición de esquemas Avro proporciona una especificación formal para la descripción de la estructura y semántica de los datos en el formato Avro. Avro es un sistema de serialización de datos desarrollado dentro del proyecto Apache Hadoop, diseñado para ser rápido, eficiente en términos de espacio y compatible con una variedad de lenguajes de programación.
La definición de esquemas Avro sigue un formato basado en JSON que permite especificar tipos de datos simples y complejos, como cadenas de caracteres, números, registros y enumeraciones, así como relaciones entre ellos. Este estándar define una serie de reglas y convenciones para la representación precisa de la estructura de datos, lo que facilita la interoperabilidad entre diferentes sistemas y aplicaciones.
Entre los aspectos clave del estándar de definición de esquemas Avro se incluyen:
- Declaración de Tipos de Datos: Permite la declaración de una amplia gama de tipos de datos, incluyendo primitivos como cadenas de caracteres y números, así como tipos complejos como registros y arrays.
- Soporte para Enumeraciones: Permite la definición de enumeraciones para representar conjuntos predefinidos de valores.
- Definición de Registros Anidados: Permite la creación de registros anidados que contienen una combinación de campos simples y complejos.
- Especificación de Nombres y Espacios de Nombres: Facilita la organización y gestión de esquemas mediante la especificación de nombres descriptivos y la agrupación en espacios de nombres lógicos.
- Control de la Evolución de Esquemas: Proporciona mecanismos para la evolución controlada de los esquemas a lo largo del tiempo, permitiendo cambios como la adición o eliminación de campos sin romper la compatibilidad con versiones anteriores.
Ámbito y beneficios
Se recomienda el uso de Avro cuando sea necesario compartir información entre varios organismos y sea necesario establecer una definición del esquema que estructure la información.
Los beneficios de usar Avro son:
- Compacto y eficiente: Avro utiliza un formato binario compacto, reduciendo el tamaño de los datos en comparación con formatos como CSV y JSON. Esta reducción ahorra espacio de almacenamiento y mejora el rendimiento en el procesamiento de datos.
- Esquema integrado: El esquema que describe la estructura de los datos permite leer los archivos sin necesidad de conocer la estructura de antemano, facilitando la interoperabilidad entre diferentes sistemas.
- Evolución de esquemas: Al permitir evolucionar los esquemas, se puede modificar la estructura de los datos sin romper la compatibilidad con los datos existentes facilitando la retro compatibilidad en sistemas cambiantes.
- Rendimiento: Gracias a su formato orientado a filas, mejora la eficiencia de escritura.
- Interoperabilidad: Al permitir leer y escribir datos desde y hacia diferentes lenguajes de programación se facilita la integración en entornos heterogéneos.
Casos de uso
- Envío de información estructurada entre diferentes organismos: Cuando sea necesario intercambiar información entre varios organismos Avro permitir definir un estructura de datos que facilita su intercambio.
- Validación de eventos: Una buena práctica asociada al envío de mensajes y eventos es validar la estructura de la información que se envía o recibe. Esta validación suele estar basada en esquemas Avro.
JSON Schema
Descripción
JSON Schema es un estándar que define la estructura, el formato y las restricciones de los datos JSON. Puede ser utilizado junto con Avro para validar los mensajes JSON producidos o consumidos por los eventos de Kafka.
Algunas consideraciones adicionales incluyen:
- Validación de Esquemas JSON: JSON Schema proporciona una forma de definir la estructura esperada de los datos JSON, así como las restricciones sobre los valores de los campos. Esto puede ser útil para garantizar que los mensajes JSON producidos y consumidos por Kafka cumplan con ciertos requisitos de formato y contenido.
- Generación Automática de Esquemas: Herramientas como avro-tools proporcionan funcionalidades para generar automáticamente esquemas Avro a partir de JSON Schema y viceversa. Esto facilita la interoperabilidad entre sistemas que utilizan diferentes formatos de datos y simplifica el proceso de integración con Kafka.
- Validación de Mensajes en Tiempo Real: La validación de esquemas JSON puede ser realizada en tiempo real por los productores y consumidores de eventos de Kafka. Esto asegura que los mensajes que entran y salen del sistema cumplan con las expectativas de estructura y contenido definidas en el JSON Schema correspondiente.
Ámbito y beneficios
Se recomienda el uso de JSONS schema para definir los datos de entrada y salida de las APIs, en la definición de datos que se almacenarán en bases de datos no relaciones y para validar formularios.
Los beneficios de usar JSON son:
- Validación de Datos: JSON Schema permite definir reglas para validar la estructura y el contenido de los datos JSON asegurando que los datos recibidos o almacenados cumplan con los requisitos esperados.
- Documentación: Al definir un esquema, también se creando una documentación clara y precisa sobre la estructura de los datos facilitando la comprensión y el uso de los datos por parte de otros desarrolladores.
- Interoperabilidad: JSON Schema ayuda a garantizar que los datos sean compatibles entre diferentes sistemas y aplicaciones, facilitando la integración y el intercambio de información.
- Automatización: Con JSON Schema puede automatizarse la validación de datos, lo que permite reducir errores y mejorar la eficiencia en el procesamiento de datos.
- Facilidad de Mantenimiento: Al tener un esquema definido, es más fácil realizar cambios y mantener la consistencia de los datos a lo largo del tiempo.
Casos de uso
- Definición de datos en las APIs: Cuando se define una API además de definir las operaciones es necesario definir la información que se intercambia en la entrada y salida de dichas operaciones. Dentro de Swagger se contempla la posibilidad de definir el JSON Schema para los datos de entrada y salida.
- Definición de datos en base de datos no relacionales: Cuando se define un documento en una base de datos no relacional para garantizar la coherencia de los datos almacenados se recomienda definir un JSON Schema.
XML Schema
Descripción
XSD (XML Schema Definition) es un lenguaje de esquema utilizado para describir la estructura y las restricciones de los contenidos de los documentos XML de una forma muy precisa, más allá de las normas sintácticas impuestas por el propio lenguaje XML. Con XML Schema se consigue una percepción del tipo de documento con un nivel alto de abstracción. Fue desarrollado por el World Wide Web Consortium (W3C) y alcanzó el nivel de recomendación en mayo de 2001.
Ámbito y beneficios
Al igual que WSDL, la definición de esquemas de datos usando documentos XML bajo XSD empieza a estar desaconsejado frente a la definición de esquemas de datos usando JSON. Sin embargo, aún existen algunos casos de uso, por lo que un diseñador podría decidir seguir utilizando este lenguaje de especificación:
- Validación de datos complejos: XML Schema permite definir reglas de validación muy detalladas y complejas, como tipos de datos específicos, restricciones de longitud, patrones y relaciones entre elementos. Esto es útil en aplicaciones donde la integridad y la precisión de los datos son críticas.
- Interoperabilidad con sistemas heredados: Muchos sistemas antiguos y aplicaciones empresariales utilizan XML y XML Schema. Si necesitas integrarte con estos sistemas, es más práctico y eficiente utilizar XML para asegurar la compatibilidad.
- Soporte para namespaces: XML soporta namespaces, lo que permite evitar conflictos de nombres cuando se combinan datos de diferentes fuentes. Esta característica permite integrar múltiples servicios o fuentes de datos.
Casos de uso
- Comunicación con servicios legacy: Al igual que ocurre con WSDL, el caso de uso más habitual será la creación estructuras de datos complejas en clientes interoperables que permitan realizar peticiones a servicios legacy implementados usando un protocolo basado en XML.
Comunicaciones
Rest
Descripción
Es un protocolo de comunicación basado en HTTP que permite a los clientes acceder y manipular recursos a través de una interfaz uniforme y predefinida. Utiliza los métodos estándar de HTTP como GET, POST, PUT y DELETE, para realizar operaciones CRUD (Crear, Leer, Actualizar y Eliminar) en los recursos. Las respuestas se devuelven generalmente en formatos como JSON o XML.
Ámbito y beneficios
El protocolo REST en estos momentos es el más utilizado en el desarrollo de servicios web. Las principales características que han posicionado a REST como uno de los protocolos más utilizados son:
- Simplicidad y facilidad de uso: REST utiliza métodos HTTP estándar (GET, POST, PUT, DELETE) que son fáciles de entender y aplicar reduciendo la curva de aprendizaje para los desarrolladores.
- Escalabilidad: REST es un protocolo sin estado, lo que significa que cada solicitud del cliente contiene toda la información necesaria para procesarla facilitando la escalabilidad horizontal de los servicios.
- Flexibilidad y libertad de formato: Aunque JSON es el formato más comúnmente utilizado con REST, también puede trabajar con XML, HTML y otros formatos proporcionando flexibilidad en las comunicaciones.
- Interoperabilidad: REST es compatible con cualquier cliente que pueda enviar solicitudes HTTP, lo que lo hace altamente interoperable y adecuado para aplicaciones web y móviles.
- Eficiencia en el uso de ancho de banda: Las APIs RESTful suelen ser menos verbosas que las basadas en SOAP, lo que reduce el uso de ancho de banda y mejora el rendimiento.
- Facilidad de integración: REST se integra fácilmente con servicios y aplicaciones modernas, incluyendo microservicios y arquitecturas basadas en la nube.
El protocolo REST unido a generación de API públicas permitirá a la JdA la creación de servicios públicos que puedan ser invocados fácilmente por entidades y ciudadanos.
Casos de uso
- Publicación de servicios para operar con datos: Una práctica habitual que actualmente está desaconsejada es compartir una base de datos entre varias aplicaciones mediante DB Link. Se puede evitar esta práctica si la aplicación responsable de la base de datos publica servicios REST con las operaciones que pueden utilizarse para interactuar con la base de datos. De esta forma se mantiene la comunicación virtualmente y se centralizan todas las peticiones en una única aplicación que será la responsable de interactuar con la base de datos.
- Publicación de una API Pública: Dado que HTTP es el canal de comunicación más habitual, REST el protocolo recomendado para la creación de APIs que pueda ser invocada por cualquier entidad, organismo o ciudadano.
- Servicios interoperables: Al ser el protocolo que se usa como estándar en las comunicaciones, es el más recomendado a la hora de implementar servicios que deban ser interoperable y comunicarse con otros Sistemas de Información o con aplicaciones externas a JdA.
Graphql
Descripción
Es un lenguaje de consulta para APIs desarrollado por Facebook. Utiliza un único punto de entrada para todas las solicitudes y permite a los clientes especificar la estructura de los datos que desean recibir. GraphQL se basa en un esquema de tipos definido por el servidor, lo que proporciona una descripción completa de los datos disponibles y las operaciones que se pueden realizar. Esto facilita la evolución de la API con el tiempo y permite una mayor flexibilidad en el desarrollo de aplicaciones cliente. GraphQL se utiliza ampliamente en aplicaciones modernas para optimizar las consultas de datos, reducir el tráfico de red y mejorar la experiencia del usuario.
Ámbito y beneficios
El uso de GraphQL está muy relacionado con la gestión de comunicaciones donde intervienen elementos del FrontEnd. Especialmente se utiliza en aplicaciones móviles y aquellas aplicaciones que tienen que ahorrar en almacenamiento interno y ancho de banda.
Los beneficios que aporta es este ámbito el uso de servicios GraphQL son:
- Consultas de datos complejas: Cuando una aplicación FrontEnd necesita obtener información de múltiples fuentes y a la vez no consumir excesivamente los recursos del dispositivo sobre el que está corriendo, GraphQL permite a los clientes solicitar exactamente los datos que necesitan, reduciendo la sobrecarga de datos innecesarios.
- Optimización de rendimiento: En aplicaciones móviles o de baja conectividad, GraphQL puede reducir el número de peticiones al servidor al permitir que los clientes obtengan todos los datos necesarios en una sola solicitud.
- Evolución de la API sin interrupciones: GraphQL permite agregar nuevos campos y tipos a la API sin afectar a los clientes existentes. Esto facilita la evolución y el mantenimiento de la API a lo largo del tiempo.
- Flexibilidad para los desarrolladores de FrontEnd: GraphQL proporciona a los desarrolladores de FrontEnd más control sobre los datos que reciben, permitiéndoles construir interfaces de usuario más eficientes y personalizadas.
- Tipado fuerte y validación: GraphQL utiliza un sistema de tipos fuerte que permite validar las consultas antes de ejecutarlas, reduciendo errores y mejorando la seguridad.
Casos de uso
- Consulta de expedientes en aplicación móvil: Las aplicaciones móviles que permiten a los ciudadanos consultar sus expedientes, como Carpeta Ciudadana, pueden optimizar mucho su servicio utilizando el protocolo GraphQL. Estas aplicaciones consultan de múltiples fuentes y lo habitual es que, de toda la información recibida, compongan como resultado el expediente de un ciudadano donde solo un mínimo de información de la obtenida es relevante para él. Usando GraphQL se puede gestionar más fácilmente que con REST qué información se devuelve, optimizando los recursos del dispositivo móvil y el ancho de banda sobre todo cuando se usan datos móviles.
gRPC
Descripción
Es un protocolo de comunicación de código abierto desarrollado por Google, diseñado para permitir la comunicación eficiente y confiable entre servicios distribuidos. Se basa en HTTP/2 para la comunicación de datos y utiliza el Protocolo de Buffers de Google (protobuf) como su mecanismo de serialización. Este protocolo ofrece características avanzadas como llamadas de procedimiento remoto (RPC) de bajo costo, streaming de datos bidireccional y soporte integrado para autenticación y autorización. Es ampliamente utilizado en aplicaciones distribuidas y sistemas de microservicios debido a su eficiencia, escalabilidad y facilidad de uso.
Ámbito y beneficios
Aunque gRPC utiliza también HTTP y es mucho más óptimo que REST, lamentablemente es un protocolo que no logra imponerse a REST en el mercado. Por lo tanto, es un protocolo que no se recomienda utilizar en servicios que deban ser interoperables o estar publicados en Internet. Sin embargo, gRPC es un protocolo que puede utilizarse para optimizar una arquitectura de microservicios y reducir el tiempo de espera que se produce cuando varios microservicios tienen que interactuar en una misma petición. Por lo tanto, es recomendable sobre todo en comunicaciones internas dentro del mismo sistema de información, en microservicios que se diseñan para interactuar estrechamente entre sí y donde el equipo de desarrollo pueda implementar la opción de comunicación más óptima sin que intervengan elementos del exterior.
Los beneficios que aporta gRPC en el contexto que se ha indicado son:
- Alto rendimiento y baja latencia: gRPC utiliza HTTP/2 lo que permite la multiplexación de múltiples solicitudes en una sola conexión, reduciendo la latencia y mejorando el rendimiento general.
- Protocolo binario eficiente: A diferencia de REST, que generalmente utiliza JSON, gRPC utiliza Protocol Buffers (Protobuf) para la serialización de datos produciendo mensajes más pequeños y rápidos de procesar.
- Comunicación bidireccional: gRPC soporta streaming bidireccional, lo que permite que tanto el cliente como el servidor envíen múltiples mensajes en ambas direcciones utilizando una única conexión.
- Definición de servicios y contratos: gRPC permite definir servicios y métodos de manera clara y precisa utilizando archivos .proto facilitando la generación automática de código cliente y servidor en múltiples lenguajes de programación.
- Seguridad y autenticación: gRPC soporta TLS (Transport Layer Security) de manera nativa, proporcionando una capa adicional de seguridad en la comunicación entre microservicios.
- Manejo de errores y control de flujo: gRPC proporciona mecanismos robustos para el manejo de errores y el control de flujo, lo que mejora la resiliencia y la estabilidad de la comunicación entre microservicios.
Casos de uso
- Comunicación interna entre microservicios: Como ya se ha indicado, el caso de uso más recomendado es implementar este tipo de comunicación para comunicar todos los microservicios que interaccionan entre sí en un Sistema de Información. También es posible utilizar este protocolo para comunicarse con microservicios externos al Sistema de Información, aunque en este caso, al no ser el protocolo habitual, deberán coordinarse los equipos responsables de cada Sistema de Información para que la integración se realice con éxito y de la forma más óptima posible.
WebSockets
Descripción
Es un protocolo de comunicación bidireccional y full-duplex que se ejecuta sobre TCP. Este protocolo está diseñado para habilitar una comunicación en tiempo real entre un cliente y un servidor a través de una única conexión persistente. Permite que los datos se transmitan de forma eficiente en ambas direcciones.
Ámbito y beneficios
WebSocket es un protocolo muy relacionado con los componentes FrontEnd y suele utilizarse cuando es necesario establecer una comunicación eficiente y que consuma pocos recursos en tiempo real entre el cliente y el servidor.
Los beneficios de WebSocket son:
- Comunicación bidireccional: WebSockets permite una comunicación en tiempo real entre el cliente y el servidor, lo que facilita el intercambio de datos en ambas direcciones sin necesidad de múltiples solicitudes HTTP.
- Baja latencia: Debido a que WebSockets mantienen una conexión abierta, la latencia es significativamente menor en comparación con protocolos que requieren establecer una nueva conexión para cada solicitud.
- Eficiencia en el uso de recursos: WebSockets utiliza menos ancho de banda y recursos del servidor ya que no necesitan enviar encabezados HTTP completos con cada mensaje permitiendo una comunicación más eficiente.
- Actualizaciones en tiempo real: WebSockets el ideal para aplicaciones que requieran actualizaciones instantáneas como notificaciones, mensajes de chat, y datos en tiempo real.
- Escalabilidad: WebSockets puede manejar múltiples conexiones simultáneas de manera eficiente, lo que los hace adecuado para aplicaciones que necesitan interactuar con muchos usuarios al mismo tiempo.
- Compatibilidad con múltiples plataformas: WebSockets es compatible con la mayoría de los navegadores modernos y pueden ser utilizados en aplicaciones web, móviles y de escritorio.
Casos de uso
- Aplicaciones de chat y mensajería: WebSockets es el protocolo más indicado para implementar aplicaciones que ofrezcan un servicio de chat ya sea con un operador o una IA al permitir una comunicación en tiempo real entre el cliente y el servidor.
- Actualizaciones en tiempo real: WebSocket está especialmente recomendado en aplicaciones que necesitan mostrar datos en tiempo real como cuadros de mandos, sistemas de monitoreo o aplicaciones de seguimiento de vehículos, ya que permite que los datos se actualicen sin necesidad de refrescar la página.
Server-Sent Events (SSE)
Descripción
Es un protocolo basado en HTTP que permite a un servidor enviar eventos de forma asíncrona al cliente a través de una conexión HTTP persistente. SSE es unidireccional (del servidor al cliente) y está orientado principalmente a la transmisión de datos desde el servidor al cliente en tiempo real, como actualizaciones de estado, notificaciones o feeds de noticias. SSE utiliza el formato de texto plano y se integra bien con la infraestructura web existente, lo que lo hace fácil de implementar y compatible con una amplia gama de tecnologías cliente.
Ámbito y beneficios
La principal diferencia entre SSE y WebSocket es que SSE establece una comunicación unidireccional y WebSocket bidireccional. Se recomienda usar SSR cuando comunicación va a ser unidireccional y el servidor no espera respuesta del cliente.
Los principales beneficios asociados a SSE son:
- Actualizaciones unidireccionales en tiempo real: Cuando solo es encesario enviar datos desde el servidor al cliente, como en aplicaciones de noticias, resultados deportivos, o actualizaciones de redes sociales1.
- Simplicidad y eficiencia: SSE utiliza el protocolo HTTP estándar lo que facilita su implementación y compatibilidad con la mayoría de los navegadores modernos.
- Menor carga en el servidor: SSE es más eficiente en términos de recursos del servidor, especialmente en aplicaciones donde solo se necesita enviar datos desde el servidor al cliente.
- Reconexión automática: SSE maneja automáticamente la reconexión en caso de pérdida de conexión simplificando la gestión de la conexión.
Casos de uso
- Notificaciones móviles: Quizás el caso de uso donde más se utiliza el protocolo SSE en el mercado ahora mismo sea para la generación de notificaciones móviles.
- Feed de noticias: Aunque cada vez menos habitual, el protocolo SSE tradicionalmente ha estado vinculado a la generación de feed de noticias y notificación de actualizaciones.
Seguridad
SSOWEB(SAML 2.0)
Descripción
SAML 2.0 (Security Assertion Markup Language) es un estándar abierto creado para proporcionar el inicio de sesión único (SSO) entre dominios. En otras palabras, permite que un usuario se autentique en un sistema y acceda a otro proporcionando una prueba de su autenticación.
Ámbito y beneficios
El principal ámbito de actuación de SAML es permitir, de forma segura, la autenticación de ciudadanos en sistemas de administración digital. Este protocolo permite al ciudadano autenticarse de forma segura, sin necesidad generación de contraseñas, en estos sistemas. Este protocolo de seguridad permite utilizar una autenticación de doble factor y obtener un token que, añadido a sus peticiones, le permitirá acceder de forma controlada a su información privada.
Casos de uso
- Autenticación de ventanilla electrónica: Quizás el caso de uso más paradigmático para utilizar este protocolo de seguridad es la autenticación de ciudadanos en una ventanilla electrónica. Esta autenticación, que suele hacerse mediante certificado digital y otro tipo de método similar, permite autenticarse a los ciudadanos en la Ventanilla Electrónica sin necesidad de completar un formulario de registro tradicional.
HTTPS/SSL
Descripción
HTTPS permite la autenticación del cliente y del servidor mediante certificados.
SSL es un protocolo que transmite las comunicaciones por Internet en formato cifrado. De esta manera se garantiza que la información se envíe sin cambios al servidor deseado. Es posible aplicar servicios web HTTPS a todos los tipos de clientes, incluidos los clientes Java EE y los clientes Java independientes.
En la actualidad, HTTPS con certificados del servidor constituye la configuración más habitual de la Web. En esta configuración, el servidor debe presentar su certificado al cliente para determinar la identidad del servidor. El cliente no necesita presentar su certificado al servidor para que este determine la identidad de aquel. En otras palabras, el cliente puede autenticar al servidor, pero el servidor no puede autenticar al cliente. Sin embargo, también es posible usar HTTPS junto con la autenticación básica, que permite al servidor autenticar al cliente o establecer un mecanismo de autenticación Mutual SSL donde hay un intercambio de certificados entre servidor y cliente.
Ámbito y beneficios
SSL puede utilizarse en conjunto con otros protocolos como SAML y Oauth2 y debe utilizarse cada vez que sea necesario establecer una comunicación segura entre dos o más componentes software. La comunicación al estar cifrada usando certificados solo podrá ser procesada por el sistema que posea la clave pública del certificado que cifró la comunicación, evitando ataques informáticos que se basen en suplir la identidad del remitente.
Los beneficios de usar SSL son:
- Cifrado de datos: SSL asegura que los datos transmitidos entre el servidor y el cliente estén cifrados, protegiéndolos de interceptaciones y accesos no autorizados protegiendo la información sensible de una petición como credenciales de inicio de sesión, datos de pago e información personal.
- Autenticación: SSL verifica la identidad del servidor, asegurando que los usuarios se conecten al sitio web correcto minimizando el riesgo a caer en una estafa de phishing.
- Integridad de los datos: SSL garantiza que los datos no sean alterados durante la transmisión. Esto asegura que la información recibida por el cliente es la misma que fue enviada por el servidor.
- Confianza y credibilidad: Los sitios web que utilizan SSL muestran indicadores visuales de seguridad, como el candado en la barra de direcciones y el prefijo HTTPS. Estos indicadores generan confianza en los usuarios, quienes se sienten más seguros al interactuar con el sitio.
- Mejora del SEO: Los motores de búsqueda, como Google, favorecen los sitios web que utilizan SSL en sus rankings. Esto puede mejorar la visibilidad y el posicionamiento de tu sitio web.
Casos de uso
- Comunicación entre componentes software: Siguiendo las normas de desarrollo seguro establecidas en la definición de la Arquitectura de Referencia en Seguridad, toda comunicación entre componentes software dentro y fuera de JdA debe hacerse utilizando este protocolo.
OAuth2
Descripción
OAuth2 es un protocolo de autorización que permite a terceros (clientes) acceder a contenidos propiedad de un usuario (alojados en aplicaciones de confianza, servidor de recursos) sin que éstos tengan que manejar ni conocer las credenciales del usuario. Es decir, aplicaciones de terceros pueden acceder a contenidos propiedad del usuario, pero estas aplicaciones no conocen las credenciales de autenticación. Por tanto, en OAuth podemos identificar tres entidades:
- Propietario de recursos: Es una entidad capaz de dar acceso a recursos protegidos. Cuando es una persona nos referiremos a él como usuario final.
- Cliente: Es la aplicación hace peticiones a recursos protegidos en nombre de un propietario de recursos con la autorización de este.
- Proveedor:
- Servidor de recursos: Es la entidad que tiene los recursos protegidos. Es capaz de aceptar y responder peticiones usando un access token que debe venir en el cuerpo de la petición.
- Servidor de autorización: En muchos casos el servidor de autenticación es el mismo que el Servidor de Recursos. En el caso de que se separen, el servidor de autenticación es el responsable de generar tokens de acceso y validar usuarios y credenciales.
Ámbito y beneficios
OAuth2 debe utilizarse en conjunto con SSL para garantizar que la comunicación entre los componentes software cumplan los requisitos de seguridad referentes a autorización (Oauth2) y comunicación (SSL). De manera general, y tal y como se establece en la normativa de desarrollo seguro, todas las comunicaciones deben estar securizadas utilizando un token JWT generado mediante el protocolo OAuth2 y que haya sido previamente validado por una entidad autorizada ya sea de la JdA o de otro organismo externo.
Los beneficios asociados a OAtuh2 son:
- Seguridad mejorada: OAuth2 permite a las aplicaciones acceder a los recursos de un usuario sin necesidad de compartir sus credenciales de inicio de sesión reduciendo el riesgo de exposición de contraseñas y otros datos sensibles.
- Autorización granular: OAuth2 permite definir permisos específicos para cada aplicación lo que proporciona un control detallado sobre qué datos y recursos pueden ser accesibles.
- Interoperabilidad: OAuth2 es un estándar abierto y ampliamente adoptado lo que facilita la integración entre diferentes aplicaciones y servicios.
- Escalabilidad: OAuth2 es adecuado para aplicaciones que necesitan gestionar un gran número de usuarios y permisos proporcionando una solución robusta y escalable.
- Reducción de riesgos: Al eliminar la necesidad de compartir contraseñas, OAuth reduce el riesgo de robo de credenciales y otros ataques de seguridad.
Casos de uso
- Autorización entre componentes software: Siguiendo las normas de desarrollo seguro establecidas en la definición de la Arquitectura de Referencia en Seguridad, toda petición debe venir acompañada de un token JWT generado bajo el protocolo OAuth2 para verificar la identidad de la persona o aplicación que realiza la petición.